#ifndef __ACL_DBMYSQL_INCLUDE_H__
#define __ACL_DBMYSQL_INCLUDE_H__

#ifdef __cplusplus
extern "C" {
#endif

#include "stdlib/acl_define.h"
#include "db/acl_dbpool.h"

#ifdef HAS_MYSQL

/**
 * 与acl_dbsql.acl_dbsql_select对应
 * MySQL连接池句柄select语句使用函数
 *
 * @param handle {ACL_DB_HANDLE*} 数据库连接句柄，不能为空
 * @param sql {const char*} 数据库修改语句，不能为空
 * @param error {int*} 赋予出错的错误号，错误号参见 acl_dberr.h
 * @return {ACL_SQL_RES *} sql执行结果集，失败为NULL
 */
ACL_SQL_RES *acl_dbmysql_select(ACL_DB_HANDLE *handle, const char *sql, int *error);

/**
 * 与acl_dbsql.acl_dbsql_update对应
 * MySQL连接池句柄update, insert, delete语句使用函数
 *
 * @param handle {ACL_DB_HANDLE*} 数据库连接句柄，不能为空
 * @param sql {const char*} 数据库修改语句，不能为空
 * @param error {int*} 赋予出错的错误号，错误号参见 acl_dberr.h
 * @return {int} sql执行影响行数，失败为-1
 */
int acl_dbmysql_update(ACL_DB_HANDLE *handle, const char *sql, int  *error);

/**
 * 与acl_dbsql.acl_dbsql_free_result对应
 * 释放由 acl_dbmysql_select 返回的结果集对象
 */
void acl_dbmysql_free_result(ACL_SQL_RES *res);

/**
 * 与acl_dbsql.acl_dbsql_results对应
 * 该函数中执行传入的sql查询语句，遍历查询结果集res每一行交给walk_fn回调函数处理，并在本函数中释放res
 *
 * @return {int} 成功返回遍历的行数
 */
int acl_dbmysql_results(ACL_DB_HANDLE *handle, const char *sql, int  *error,
	int (*walk_fn)(const void** my_row, void *arg), void *arg);

/**
 * 与acl_dbsql.acl_dbsql_result对应
 * 该函数中执行传入的sql查询语句，取出查询结果集res第一行交给walk_fn回调函数处理，并在本函数中释放res
 *
 * @return {int} 成功返回遍历的行数1
 */
int acl_dbmysql_result(ACL_DB_HANDLE *handle, const char *sql, int  *error,
	int (*callback)(const void** my_row, void *arg), void *arg);

#endif /* HAS_MYSQL */

#ifdef __cplusplus
}
#endif

#endif

